/* the example on page 106 */
#include <gtk/gtk.h>

/* 准备材料，自定义函数  */
	/*  comments注释  */
static void
overall_lockdown (GtkWidget *widget, gpointer window)
	/*  支持全面封城的对话框，指针一定要写window，而写user_data或data都会报错  */
{
	GtkWidget *dialog1;
	GtkWidget *content_area;
	GtkWidget *vbox;
	GtkWidget *check1;
	GtkWidget *check2;
	GtkWidget *check3;
	GtkWidget *label3;
	GtkWidget *entry1;
	
	dialog1 = gtk_dialog_new_with_buttons ("多选理由或者写下你的理由",
	                                       GTK_WINDOW(window),
	                                       GTK_DIALOG_MODAL,
	                                       "提交",
	                                       GTK_RESPONSE_OK,
	                                       "取消",
	                                       GTK_RESPONSE_CANCEL,
	                                       NULL);
	/*  对话框的标题是多选理由或者写下你的理由，GTK_DIALOG_MODAL表示独占模式就是你一定选择按钮才能进行下一步操作，GTK_RESPONSE_OK是设定提交按钮是OK功能，GTK_RESPONSE_CANCEL是设定取消按钮是CANCEL功能，NULL表示参数结束  */
	content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog1));
	/*  对话框有action_area和content_area两个区域，提交和取消按钮是属于action_area，接下的内容是属于content_area  */
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	/*  创建组合框  */
	check1 = gtk_check_button_new_with_label ("封城+多轮全员核酸，是最为原始的防疫手段");
	/*  创建检查按钮，按钮前面有空白方格，点击就会打上钩号  */
	gtk_box_pack_start (GTK_BOX(vbox), check1, FALSE, FALSE, 0);
	/*  将检查按钮装入组合框容器  */
	check2 = gtk_check_button_new_with_label ("武汉封城,深圳封城,上海当然不例外,也要跟着封城");
	gtk_box_pack_start (GTK_BOX(vbox), check2, FALSE, FALSE, 0);
	
	check3 = gtk_check_button_new_with_label ("为了绿码,市民深夜凌晨也出来排队进行核酸检测,当然医护人员也更拼了(累极了)");
	gtk_box_pack_start (GTK_BOX(vbox), check3, FALSE, FALSE, 0);
	label3 = gtk_label_new ("也可以输入你的理由:");
	/*  创建带有文字的标签，就是显示文字内容  */
	gtk_box_pack_start (GTK_BOX(vbox), label3, FALSE, FALSE, 0);
	entry1 = gtk_entry_new ();
	/*  创建一个输入框，可以输入文字  */
	gtk_box_pack_start (GTK_BOX(vbox), entry1, FALSE, FALSE, 0);
	gtk_container_add (GTK_CONTAINER (content_area), vbox);
	/*  将组合框装入content_area区域  */
	gtk_widget_show_all (vbox);
	gtk_dialog_run (GTK_DIALOG (dialog1));
	/*  运行对话框  */
	gtk_widget_destroy (dialog1);
	/*  为对话框加入关闭功能  */
}

static void
partial_lockdown (GtkWidget *widget, gpointer window)
{
	GtkWidget *dialog2;
	GtkWidget *content_area;
	GtkWidget *vbox;
	GtkWidget *check4;
	GtkWidget *check5;
	GtkWidget *check6;
	GtkWidget *label3;
	GtkWidget *entry1;
	
	dialog2 = gtk_dialog_new_with_buttons ("多选理由或者写下你的理由",
	                                       GTK_WINDOW(window),
	                                       GTK_DIALOG_MODAL,
	                                       "提交",
	                                       GTK_RESPONSE_OK,
	                                       "取消",
	                                       GTK_RESPONSE_CANCEL,
	                                       NULL);
	content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog2));
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	check4 = gtk_check_button_new_with_label ("上海并未采取“封城”“停摆”等措施，而探索出一种新的核酸筛查模式——网格化核酸筛查");
	gtk_box_pack_start (GTK_BOX(vbox), check4, FALSE, FALSE, 0);

	check5 = gtk_check_button_new_with_label ("如果上海这个城市停下来，东海上就会多出很多漂在海上的国际货轮，就会影响整个国家的经济和全球的经济");
	gtk_box_pack_start (GTK_BOX(vbox), check5, FALSE, FALSE, 0);
	
	check6 = gtk_check_button_new_with_label ("2021年，上海的国内税收收入高达1.53万亿元,是国家的钱袋子");
	gtk_box_pack_start (GTK_BOX(vbox), check6, FALSE, FALSE, 0);
	label3 = gtk_label_new ("也可以输入你的理由:");
	gtk_box_pack_start (GTK_BOX(vbox), label3, FALSE, FALSE, 0);
	entry1 = gtk_entry_new ();
	gtk_box_pack_start (GTK_BOX(vbox), entry1, FALSE, FALSE, 0);
	gtk_container_add (GTK_CONTAINER (content_area), vbox);
	gtk_widget_show_all (vbox);
	gtk_dialog_run (GTK_DIALOG (dialog2));
	gtk_widget_destroy (dialog2);
}

/* 程序主体 */
static void
activate (GtkApplication* app, gpointer user_data)
{
	GtkWidget *window;
	/* 声明变量window为构件gtkwidget */
	GtkWidget *vbox;
	GtkWidget *label1;
	GtkWidget *label2;
	GtkWidget *hbox;
	GtkWidget *button1;
	GtkWidget *button2;
	
	
	window = gtk_application_window_new (app);
	gtk_window_set_title (GTK_WINDOW (window), "上海封城话题");
	/*  为窗口顶部加上标题为上海封城话题  */
	gtk_container_set_border_width (GTK_CONTAINER (window), 10);
	/*  简单的理解是将窗口变成容器，可以装入其它构件，构件边缘与窗口边缘的距离为10像数  */
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	/*  创建组合框  */
	gtk_container_add (GTK_CONTAINER (window), vbox);
	/*  将组合框装入窗口容器  */
	
	label1 = gtk_label_new ("上海疫情发生以来，特别是3月28日隔江进行全员核检以后，感染者人数居高不下。4月4日已经过万，\n国家队15个省派出近4万名医务人员驰援上海。上海并没有像深圳一样全面封城7天，而是推出隔江封城。");
	/*  创建带有文字的标签，就是显示文字内容  */
	gtk_box_pack_start (GTK_BOX (vbox), label1, FALSE, FALSE, 0);
	label2 = gtk_label_new ("那你是支持——全面封城，还是支持——隔江封城呢？可以选择一下并说出你的理由");
	gtk_box_pack_start (GTK_BOX (vbox), label2, FALSE, FALSE, 0);
	
	hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
	gtk_container_add (GTK_CONTAINER (vbox), hbox);
	
	button1 = gtk_button_new_with_label ("支持全面封城");
	gtk_box_pack_start (GTK_BOX (hbox), button1, FALSE, FALSE, 0);
	/*  将按钮装入横向组合框的左边  */
	g_signal_connect (GTK_BUTTON (button1), "clicked", G_CALLBACK (overall_lockdown), NULL);
	/*  为按钮加上一个动作，当鼠标点击会跳转运行overall_lockdown程序  */
	
	button2 = gtk_button_new_with_label ("支持隔江封城");
	gtk_box_pack_end (GTK_BOX (hbox), button2, FALSE, FALSE, 0);
	/*  将按钮装入横向组合框的右边，注意是end  */
	g_signal_connect (GTK_BUTTON (button2), "clicked", G_CALLBACK (partial_lockdown), NULL);
	
	
	gtk_widget_show_all (window);
}

int
main (int argc, char **argv)
{
	GtkApplication *app;
	/* 声明变量app为GtkApplication类型 */
	int status;
	/* 声明变量status为整数十制进数字类型 */
	app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
	/* 创建程序app使用名称为org.gtk.example */
	g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
	/*  为程序app加上动作，当收到activate信号，就启动activate事件，跳转运行activate函数体  */
	status = g_application_run (G_APPLICATION (app), argc, argv);
	g_object_unref (app);
	return status;
}

/* gcc -g -Wall pageXX.c -o pageXX `pkg-config --cflags --libs gtk+-3.0` > mistake.text 2>&1 ; gedit mistake.text */

